﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Interfaces;
using System.Data.SqlClient; //skal bruges til database
using System.Data;

namespace Controller
{
    public class ClsDBFacade
    {
        SqlConnection connect;
        SqlCommand command;
        ClsSystemController systemController;
        string connectionString;

        public ClsDBFacade(ClsSystemController systemController)
        {
            this.systemController = systemController;
            connectionString = @"DATA Source=195.181.8.201;Initial Catalog=SortsF1Database;user Id=sa;password=Cisco2011";  // valg af database

            connect = new SqlConnection(connectionString);
            command = new SqlCommand();
            command.Connection = connect;
            command.CommandType = CommandType.StoredProcedure;
        }

        #region UploadTilDB

        public void UploadKoereTilDB(string koereNavn, int koereNummer, IClsTeams koereTeam)
        {
            command.CommandText = "UploadKoereTilDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@koereNavn", SqlDbType.VarChar);
            par.Value = koereNavn;
            command.Parameters.Add(par);

            par = new SqlParameter("@koereNummer", SqlDbType.Int);
            par.Value = koereNummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@teamNummer", SqlDbType.Int);
            par.Value = koereTeam.TeamNummer;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        public void UploadTeamsTilDB(string teamNavn, int teamNummer)
        {
            command.CommandText = "UploadTeamsTilDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@teamNavn", SqlDbType.VarChar);
            par.Value = teamNavn;
            command.Parameters.Add(par);

            par = new SqlParameter("@teamNummer", SqlDbType.Int);
            par.Value = teamNummer;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        public void UploadGrandPrixTilDB(int grandPrixNummer, string land, string baneNavn, DateTime grandPrixDatoTid, int joker, bool afviklet, int autoSatsKoere1, int autoSatsKoere2)
        {
            command.CommandText = "UploadGrandPrixTilDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@grandPrixNummer", SqlDbType.Int);
            par.Value = grandPrixNummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@land", SqlDbType.VarChar);
            par.Value = land;
            command.Parameters.Add(par);

            par = new SqlParameter("@baneNavn", SqlDbType.VarChar);
            par.Value = baneNavn;
            command.Parameters.Add(par);

            par = new SqlParameter("@grandPrixDatoTid", SqlDbType.DateTime);
            par.Value = grandPrixDatoTid;
            command.Parameters.Add(par);

            par = new SqlParameter("@joker", SqlDbType.Int);
            par.Value = joker;
            command.Parameters.Add(par);

            par = new SqlParameter("@afviklet", SqlDbType.Bit);
            par.Value = afviklet;
            command.Parameters.Add(par);

            par = new SqlParameter("@autoSatsKoere1", SqlDbType.Int);
            par.Value = autoSatsKoere1;
            command.Parameters.Add(par);

            par = new SqlParameter("@autoSatsKoere2", SqlDbType.Int);
            par.Value = autoSatsKoere2;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        public void UploadMedlemTilDBNytPostnummer(string navn, string mail, string adresse, string by, int postNummer, string adgangskode)
        {
            command.CommandText = "UploadMedlemTilDBNytPostnummer"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@navn", SqlDbType.VarChar);
            par.Value = navn;
            command.Parameters.Add(par);

            par = new SqlParameter("@mail", SqlDbType.VarChar);
            par.Value = mail;
            command.Parameters.Add(par);

            par = new SqlParameter("@adresse", SqlDbType.VarChar);
            par.Value = adresse;
            command.Parameters.Add(par);

            par = new SqlParameter("@byNavn", SqlDbType.VarChar);
            par.Value = by;
            command.Parameters.Add(par);

            par = new SqlParameter("@postnummer", SqlDbType.Int);
            par.Value = postNummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@adgangskode", SqlDbType.VarChar);
            par.Value = adgangskode;
            command.Parameters.Add(par);


            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        public void UploadMedlemTilDBGammeltPostnummer(string navn, string mail, string adresse, int postNummer, string adgangskode)
        {
            command.CommandText = "UploadMedlemTilDBGammeltPostnummer"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@navn", SqlDbType.VarChar);
            par.Value = navn;
            command.Parameters.Add(par);

            par = new SqlParameter("@mail", SqlDbType.VarChar);
            par.Value = mail;
            command.Parameters.Add(par);

            par = new SqlParameter("@adresse", SqlDbType.VarChar);
            par.Value = adresse;
            command.Parameters.Add(par);

            par = new SqlParameter("@postnummer", SqlDbType.Int);
            par.Value = postNummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@adgangskode", SqlDbType.VarChar);
            par.Value = adgangskode;
            command.Parameters.Add(par);


            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        public void UploadStemmeTilDB(int medlemsnummer, int grandprixnummer, int koerenummer)
        {
            command.CommandText = "UploadStemmeTilDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@medlemsnummer", SqlDbType.Int);
            par.Value = medlemsnummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@grandprixnummer", SqlDbType.Int);
            par.Value = grandprixnummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@koerenummer", SqlDbType.Int);
            par.Value = koerenummer;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }
        public void TestUploadStemmeTilDB(int medlemsnummer, string adgangskode, int grandprixnummer, int koerenummer)
        {
            command.CommandText = "TestUploadStemmeTilDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@medlemsnummer", SqlDbType.Int);
            par.Value = medlemsnummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@adgangskode", SqlDbType.VarChar);
            par.Value = adgangskode;
            command.Parameters.Add(par);

            par = new SqlParameter("@grandprixnummer", SqlDbType.Int);
            par.Value = grandprixnummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@koerenummer", SqlDbType.Int);
            par.Value = koerenummer;
            command.Parameters.Add(par);



            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        public void UploadPlaceringTilDB(int grandPrixNummer, int koereNummer, int placering)
        {
            command.CommandText = "UploadPlaceringTilDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@grandPrixNummer", SqlDbType.Int);
            par.Value = grandPrixNummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@koereNummer", SqlDbType.Int);
            par.Value = koereNummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@placering", SqlDbType.Int);
            par.Value = placering;
            command.Parameters.Add(par);


            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        public void UploadPointsaetTilDB(int placering, int point)
        {
            command.CommandText = "UploadPointsaetTilDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@placering", SqlDbType.Int);
            par.Value = placering;
            command.Parameters.Add(par);

            par = new SqlParameter("@point", SqlDbType.Int);
            par.Value = point;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        public void UploadReglerTilDB(string tekst)
        {
            command.CommandText = "UploadReglerTilDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@tekst", SqlDbType.VarChar);
            par.Value = tekst;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }


        #endregion

        #region DownloadFraDB

        public void DownloadKoerereFraDB()
        {
            systemController.ClearKoerereListe();
            SqlDataReader datareader = null; // skal referere til indlæst data 
            string koereNavn;
            int koereNummer;
            int teamNummer;

            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget
            command.CommandText = "DownloadKoerereFraDB"; // valg af stored procedure

            try
            {
                connect.Open();

                datareader = command.ExecuteReader(); //læs og tage data med tilbage

                while (datareader.Read())
                {
                    koereNavn = datareader["koereNavn"].ToString();
                    koereNummer = (int)datareader["koereNummer"];
                    teamNummer = (int)datareader["teamNummer"];
                    systemController.DownloadKoerereFraDB(koereNavn, koereNummer, teamNummer);
                }
            }

            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {   // lukke reader og connection
                if (datareader != null)
                {
                    datareader.Close();
                }

                if (connect.State == ConnectionState.Open)
                {
                    connect.Close();
                }
            }
        }

        public void DownloadTeamsFraDB()
        {
            systemController.ClearTeamsListe();
            SqlDataReader datareader = null; // skal referere til indlæst data 
            string teamNavn;
            int teamNummer;

            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget
            command.CommandText = "DownloadTeamsFraDB"; // valg af stored procedure

            try
            {
                connect.Open();

                datareader = command.ExecuteReader(); //læs og tage data med tilbage

                while (datareader.Read())
                {
                    teamNavn = datareader["Teamnavn"].ToString();
                    teamNummer = (int)datareader["Teamnummer"];
                    systemController.DownloadTeamsFraDB(teamNavn, teamNummer);
                }
            }

            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {   // lukke reader og connection
                if (datareader != null)
                {
                    datareader.Close();
                }

                if (connect.State == ConnectionState.Open)
                {
                    connect.Close();
                }
            }
        }

        public void DownloadGrandPrixFraDB()
        {
            systemController.ClearGrandPrixListe();
            SqlDataReader datareader = null; // skal referere til indlæst data 
            int grandPrixNummer;
            string land;
            string baneNavn;
            DateTime grandPrixDatoTid;
            int joker;
            bool afviklet;
            int autoSatsKoere1;
            int autoSatsKoere2;

            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget
            command.CommandText = "DownloadGrandPrixFraDB"; // valg af stored procedure

            try
            {
                connect.Open();

                datareader = command.ExecuteReader(); //læs og tage data med tilbage

                while (datareader.Read())
                {
                    grandPrixNummer = (int)datareader["grandPrixNummer"];
                    land = datareader["land"].ToString();
                    baneNavn = datareader["baneNavn"].ToString();
                    grandPrixDatoTid = (DateTime)datareader["grandPrixDatoTid"];
                    joker = (int)datareader["joker"];
                    afviklet = (bool)datareader["afviklet"];
                    autoSatsKoere1 = (int)datareader["autoSatsKoere1"];
                    autoSatsKoere2 = (int)datareader["autoSatsKoere2"];

                    systemController.DownloadGrandPrixFraDB(grandPrixNummer, land, baneNavn, grandPrixDatoTid, joker, afviklet, autoSatsKoere1, autoSatsKoere2);
                }
            }

            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {   // lukke reader og connection
                if (datareader != null)
                {
                    datareader.Close();
                }

                if (connect.State == ConnectionState.Open)
                {
                    connect.Close();
                }
            }
        }

        public void DownloadMedlemFraDB()
        {
            systemController.ClearMedlemsListe();
            SqlDataReader datareader = null; // skal referere til indlæst data 

            string navn;
            string mail;
            string adresse;
            string by;
            int postNummer;
            int medlemsNummer;
            bool betalt;

            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget
            command.CommandText = "DownloadMedlemFraDB"; // valg af stored procedure

            try
            {
                connect.Open();

                datareader = command.ExecuteReader(); //læs og tage data med tilbage

                while (datareader.Read())
                {
                    navn = datareader["navn"].ToString();
                    mail = datareader["mail"].ToString();
                    adresse = datareader["adresse"].ToString();
                    by = datareader["bynavn"].ToString();
                    postNummer = (int)datareader["postnummer"];
                    medlemsNummer = (int)datareader["medlemsnummer"];
                    betalt = (bool)datareader["betalt"];

                    systemController.DownloadMedlemFraDB(navn, mail, adresse, by, postNummer, medlemsNummer, betalt);
                }
            }

            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {   // lukke reader og connection
                if (datareader != null)
                {
                    datareader.Close();
                }

                if (connect.State == ConnectionState.Open)
                {
                    connect.Close();
                }
            }
        }

        public void DownloadPostByFraDB()
        {
            systemController.ClearPostByListe();
            SqlDataReader datareader = null; // skal referere til indlæst data 
            int postnummer;
            string byNavn;


            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget
            command.CommandText = "DownloadPostByFraDB"; // valg af stored procedure

            try
            {
                connect.Open();

                datareader = command.ExecuteReader(); //læs og tage data med tilbage


                while (datareader.Read())
                {
                    postnummer = (int)datareader["postnummer"];
                    byNavn = datareader["bynavn"].ToString();

                    systemController.DownloadPostByFraDB(postnummer, byNavn);
                }
            }

            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {   // lukke reader og connection
                if (datareader != null)
                {
                    datareader.Close();
                }

                if (connect.State == ConnectionState.Open)
                {
                    connect.Close();
                }
            }
        }

        public void DownloadPointsaetFraDB()
        {
            systemController.ClearPointsaetListe();
            SqlDataReader datareader = null; // skal referere til indlæst data 
            int placering;
            decimal point;


            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget
            command.CommandText = "DownloadPointsaetFraDB"; // valg af stored procedure

            try
            {
                connect.Open();

                datareader = command.ExecuteReader(); //læs og tage data med tilbage


                while (datareader.Read())
                {
                    placering = (int)datareader["placering"];
                    point = (decimal)datareader["point"];

                    systemController.DownloadPointsaetFraDB(placering, point);
                }
            }

            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {   // lukke reader og connection
                if (datareader != null)
                {
                    datareader.Close();
                }

                if (connect.State == ConnectionState.Open)
                {
                    connect.Close();
                }
            }
        }

        public decimal DownloadMedlemsSamledePointFraDB(int medlemsnummer)
        {
            
            SqlDataReader datareader = null; // skal referere til indlæst data 
            decimal point;


            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget
            command.CommandText = "DownloadMedlemsSamledePointFraDB"; // valg af stored procedure

            SqlParameter par = new SqlParameter("@medlemsnummer", SqlDbType.Int);
            par.Value = medlemsnummer;
            command.Parameters.Add(par);

            try
            {
                connect.Open();

                datareader = command.ExecuteReader(); //læs og tage data med tilbage


                while (datareader.Read())
                {
                    //Hvis et medlem ikke har stemt, vil den ikke kunne læse personens point.
                    //derfor laver vi denne try, der kører hvis medlemmet har stemt.
                    try
                    {
                        point = (decimal)datareader["point"];

                        return point;
                    }

                    // Catchen er der, hvis medlemmet ikke har stemt endnu, derfor får han 0 point.
                    catch (Exception)
                    {
                        point = 0;
                        return point;
                    }

                }
            }

            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {   // lukke reader og connection
                if (datareader != null)
                {
                    datareader.Close();
                }

                if (connect.State == ConnectionState.Open)
                {
                    connect.Close();
                }
            }

            return -1;
        }

        public string DownloadReglerFraDB()
        {
            SqlDataReader datareader = null; // skal referere til indlæst data 
            string regler = ""; 

            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget
            command.CommandText = "DownloadReglerFraDB"; // valg af stored procedure

            try
            {
                connect.Open();

                datareader = command.ExecuteReader(); //læs og tage data med tilbage

                while (datareader.Read())
                {
                    regler = datareader["tekst"].ToString();
                    
                }
            }

            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {   // lukke reader og connection
                if (datareader != null)
                {
                    datareader.Close();
                }

                if (connect.State == ConnectionState.Open)
                {
                    connect.Close();
                }
            }

            return regler;
        }

        public void DownloadMedlemSamledeSatsFraDB(int medlemsnummer)
        {
            systemController.ClearSamledeSatsListe();
            SqlDataReader datareader = null; // skal referere til indlæst data 
            string koererNavn = "";
            int samledeStemme = 0; 

            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget
            command.CommandText = "DownloadMedlemSamledeSatsFraDB"; // valg af stored procedure

            SqlParameter par = new SqlParameter("@medlemsnummer", SqlDbType.Int);
            par.Value = medlemsnummer;
            command.Parameters.Add(par);

            try
            {
                connect.Open();

                datareader = command.ExecuteReader(); //læs og tage data med tilbage

                while (datareader.Read())
                {
                    koererNavn = datareader["koerenavn"].ToString();
                    samledeStemme = (int)datareader["samledeStemme"];

                    systemController.DownloadMedlemSamledeSatsFraDB(koererNavn, samledeStemme); 
                }
            }

            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {   // lukke reader og connection
                if (datareader != null)
                {
                    datareader.Close();
                }

                if (connect.State == ConnectionState.Open)
                {
                    connect.Close();
                }
            }
        }

        #endregion

        #region RedigerDBTabeller

        //Skal bruges, hvis et medlem flytter til et nyt postnummer, der ikke allerede eksisterer i Databasen.
        //den opretter et nyt postnummer og opdaterer medlemmets data.
        public void RedigerMedlemIDBNytPostnummer(long medlemsnummer, string navn, string adresse, int postNummer, string mail, bool betalt, string byNavn)
        {
            command.CommandText = "RedigerMedlemIDBNytPostnummer"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database

            SqlParameter par = new SqlParameter("@navn", SqlDbType.VarChar);
            par.Value = navn;
            command.Parameters.Add(par);

            par = new SqlParameter("@medlemsnummer", SqlDbType.Int);
            par.Value = medlemsnummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@mail", SqlDbType.VarChar);
            par.Value = mail;
            command.Parameters.Add(par);

            par = new SqlParameter("@adresse", SqlDbType.VarChar);
            par.Value = adresse;
            command.Parameters.Add(par);

            par = new SqlParameter("@byNavn", SqlDbType.VarChar);
            par.Value = byNavn;
            command.Parameters.Add(par);

            par = new SqlParameter("@postnummer", SqlDbType.Int);
            par.Value = postNummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@betalt", SqlDbType.Bit);
            par.Value = betalt;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }


        // Skal bruges, hvis et medlem flytter til et postnummer, der allerede findes i Databasen.
        public void RedigerMedlemIDBGammeltPostnummer(long medlemsnummer, string navn, string adresse, int postNummer, string mail, bool betalt)
        {
            command.CommandText = "RedigerMedlemIDBGammeltPostnummer"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database

            SqlParameter par = new SqlParameter("@navn", SqlDbType.VarChar);
            par.Value = navn;
            command.Parameters.Add(par);

            par = new SqlParameter("@medlemsnummer", SqlDbType.Int);
            par.Value = medlemsnummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@mail", SqlDbType.VarChar);
            par.Value = mail;
            command.Parameters.Add(par);

            par = new SqlParameter("@adresse", SqlDbType.VarChar);
            par.Value = adresse;
            command.Parameters.Add(par);

            par = new SqlParameter("@postnummer", SqlDbType.Int);
            par.Value = postNummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@betalt", SqlDbType.Bit);
            par.Value = betalt;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        public void RedigerKoereIDB(string koereNavn, int koereNummer, IClsTeams koereTeam)
        {
            command.CommandText = "RedigerKoereIDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@koereNavn", SqlDbType.VarChar);
            par.Value = koereNavn;
            command.Parameters.Add(par);

            par = new SqlParameter("@koereNummer", SqlDbType.Int);
            par.Value = koereNummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@teamNummer", SqlDbType.Int);
            par.Value = koereTeam.TeamNummer;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }
        public void RedigerTeamIDB(string teamNavn, int teamNummer)
        {
            command.CommandText = "RedigerTeamIDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@teamNavn", SqlDbType.VarChar);
            par.Value = teamNavn;
            command.Parameters.Add(par);

            par = new SqlParameter("@teamNummer", SqlDbType.Int);
            par.Value = teamNummer;
            command.Parameters.Add(par);


            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }
        public void RedigerGrandPrixIDB(int grandPrixNummer, string land, string bane, DateTime dato, bool afviklet, int joker, int autoSatsKoere1, int autoSatsKoere2)
        {
            command.CommandText = "RedigerGrandPrixIDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@land", SqlDbType.VarChar);
            par.Value = land;
            command.Parameters.Add(par);

            par = new SqlParameter("@baneNavn", SqlDbType.VarChar);
            par.Value = bane;
            command.Parameters.Add(par);

            par = new SqlParameter("@grandPrixDatoTid", SqlDbType.Date);
            par.Value = dato;
            command.Parameters.Add(par);

            par = new SqlParameter("@afviklet", SqlDbType.Bit);
            par.Value = afviklet;
            command.Parameters.Add(par);

            par = new SqlParameter("@Joker", SqlDbType.Int);
            par.Value = joker;
            command.Parameters.Add(par);

            par = new SqlParameter("@grandPrixNummer", SqlDbType.Int);
            par.Value = grandPrixNummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@autoSatsKoere1", SqlDbType.Int);
            par.Value = autoSatsKoere1;
            command.Parameters.Add(par);

            par = new SqlParameter("@autoSatsKoere2", SqlDbType.Int);
            par.Value = autoSatsKoere2;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        public void RedigerPointSaetIDB(int placering, decimal point)
        {
            command.CommandText = "RedigerPointSaetIDB"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@placering", SqlDbType.Int);
            par.Value = placering;
            command.Parameters.Add(par);

            par = new SqlParameter("@point", SqlDbType.Decimal);
            par.Value = point;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        #endregion

        public int MedlemLogin(int medlemsnummer, string adgangskode)
        {
            SqlDataReader datareader = null;
            int godkendelse;

            command.CommandText = "MedlemLogin"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@medlemsnummer", SqlDbType.Int);
            par.Value = medlemsnummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@adgangskode", SqlDbType.VarChar);
            par.Value = adgangskode;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database

                datareader = command.ExecuteReader();

                while (datareader.Read())
                {
                    godkendelse = (int)datareader["medlemsnummer"];

                    return godkendelse;
                }


            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
            return -1;
        }

        public bool CheckStemme(int medlemsnummer, int grandPrixNummer)
        {
            SqlDataReader datareader = null;
            int checkMedlemsnummer;
            int checkGrandPrixNummer;

            bool checkStemme = false;

            command.CommandText = "CheckStemme"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@medlemsnummer", SqlDbType.Int);
            par.Value = medlemsnummer;
            command.Parameters.Add(par);

            par = new SqlParameter("@grandprixnummer", SqlDbType.Int);
            par.Value = grandPrixNummer;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database

                datareader = command.ExecuteReader();

                while (datareader.Read())
                {
                    checkMedlemsnummer = (int)datareader["medlemsnummer"];
                    checkGrandPrixNummer = (int)datareader["grandprixnummer"];

                    checkStemme = systemController.CheckStemme(checkMedlemsnummer, checkGrandPrixNummer);
                }

            }
            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }

            return checkStemme;
        }

    }
}
